/**
 * qccr.com Inc.
 * Copyright (c) 2014-2016 All Rights Reserved.
 */
package com.ssc.controller.interceptor;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * 
 * @author wuxianji
 * @version $Id: ContollerLoggingAspect.java, v 0.1 2016年4月14日 下午1:47:02 wxianji Exp $
 */
@Component
public class ContollerLoggingAspect {

    private static final Logger log = LoggerFactory.getLogger("com.qccr.growth.web.controller");

    /**
     * 定义一个方法，用于声明切入点表达式。一般的，该方法中再不需要添加其他的代码
     * 使用@Pointcut 来声明切入点表达式
     * 后面的其他通知直接使用方法名直接引用方法名即可
     */
//    @Pointcut("execution(* com.qccr.growth.web.controller..*.*(..))")
    public void declareJoinPointExpression() {

    }

    /**
     * 环绕通知需要携带ProceedingJoinPoint类型的参数
     * 环绕通知类似于动态代理的全过程：ProceedingJoinPoint类型的参数可以决定是否执行目标方法。
     * 而且环绕通知必须有返回值，返回值即为目标方法的返回值
     */
//    @Around("declareJoinPointExpression()")
//    public Object aroundMethod(ProceedingJoinPoint pjd) {
//        Object result = null;
//        String className = pjd.getTarget().getClass().getName();
//        String methodName = pjd.getSignature().getName();
//
//        Object params = pjd.getArgs() == null ? null : Arrays.asList(pjd.getArgs());
//
//        try {
//            result = pjd.proceed();
//        } catch (Throwable e) {
//            //异常通知
//            String logStr = String.format("method【%s.%s】;parameter【%s】;", className, methodName,
//                params);
//            log.error(logStr + ";expection【" + e + "】", e);
//
//            result = createFailResult(e.getMessage());
//        } finally {
//
//            StringBuilder logStr = new StringBuilder("\n action report ----------------  \n");
//            logStr.append("className         :" + className).append("\r\n");
//            logStr.append("method            :" + methodName).append("\r\n");
//            try {
//                logStr.append("params            :" + JSON.toJSONString(params)).append("\r\n");
//            } catch (Throwable e2) {
//                log.debug("controller参数转JSON异常", e2);
//                logStr.append("params            :" + params).append("\r\n");
//            }
//            try {
//                logStr.append("result            :" + JSON.toJSONString(result)).append("\r\n");
//            } catch (Exception e2) {
//                log.debug("controller参数转JSON异常", e2);
//                logStr.append("result            :" + result).append("\r\n");
//            }
//            log.info(logStr.toString());
//        }
//
//        return result;
//    }
//
//    private String createFailResult(String errInfo) {
//
//        AjaxResult result = AjaxResult.createFailure();
//        result.setInfo(errInfo);
//
//        return result.toJson();
//    }
}
